use self::ConfigValue as CV;
-#[derive(PartialEq, Eq, Hash)]
-struct ConfigFile {
- path: Option<PathBuf>,
-}
-
-impl ConfigFile {
- pub fn new(path: PathBuf) -> ConfigFile {
- let canonical = match fs::canonicalize(path) {
- Ok(p) => Some(p),
- Err(_) => None,
- };
-
- ConfigFile { path: canonical }
- }
-
- pub fn exist(&self) -> bool {
- self.path.is_some()
- }
-
- pub fn as_path_buf(&self) -> Option<PathBuf> {
- self.path.clone()
- }
-}
-
pub struct Config {
home_path: Filesystem,
shell: RefCell<MultiShell>,
where F: FnMut(File, &Path) -> CargoResult<()>
{
let mut current = pwd;
- let mut stash: HashSet<ConfigFile> = HashSet::new();
+ let mut stash: HashSet<PathBuf> = HashSet::new();
loop {
- let possible = ConfigFile::new(current.join(".cargo").join("config"));
- if possible.exist() && stash.get(&possible).is_none() {
- let name = possible.as_path_buf().unwrap();
- let file = try!(File::open(&name));
+ let possible = current.join(".cargo").join("config");
+ if fs::metadata(&possible).is_ok() {
+ let file = try!(File::open(&possible));
- try!(walk(file, &name));
+ try!(walk(file, &possible));
stash.insert(possible);
}
human("Cargo couldn't find your home directory. \
This probably means that $HOME was not set.")
}));
- let config = ConfigFile::new(home.join("config"));
- if config.exist() && stash.get(&config).is_none() {
- let name = config.as_path_buf().unwrap();
- let file = try!(File::open(&name));
- try!(walk(file, &name));
+ let config = home.join("config");
+ if !stash.contains(&config) && fs::metadata(&config).is_ok() {
+ let file = try!(File::open(&config));
+ try!(walk(file, &config));
}
Ok(())